home *** CD-ROM | disk | FTP | other *** search
-
- #ifndef _WDATAVRF_HPP_INCLUDED
- #define _WDATAVRF_HPP_INCLUDED
-
- //------------------------------------------------------------------------
- //
- // WDataValueReference
- //
- // This class represents data values and is only of interest to
- // implementors of new data access models (i.e. subclasses of WDataSource).
- //
- //
- // How reference objects are created:
- //
- // The WDVFactory class knows how to create objects of a given type.
- // To create an object you thus call WDVFactory::Allocate, passing
- // in the ID of the type you are interested in creating. You can also
- // optionally pass in a pointer to an existing WDataValueReference
- // object, which will then be used to initialize the new object.
- //
- // To create the new objects, WDVFactory stores prototype objects
- // internally, and then calls the Clone method on the appropriate
- // prototype object.
- //
- //------------------------------------------------------------------------
-
- #ifndef _WOBJECT_HPP_INCLUDED
- #include "wobject.hpp"
- #endif
- #ifndef _WEVENT_HPP_INCLUDED
- #include "wevent.hpp"
- #endif
- #ifndef _WDATAOBJ_HPP_INCLUDED
- #include "wdataobj.hpp"
- #endif
- #ifndef _WVECTOR_HPP_INCLUDED
- #include "wvector.hpp"
- #endif
-
- #define WDV_CONVERSION_METHODS \
- \
- virtual WBool GetCHAR( WString & s, WDataValue *val ) const; \
- virtual WBool SetCHAR( const WString & string, WDataValue *val ); \
- virtual WBool GetSSHORT( SWORD & s, WDataValue *val ) const; \
- virtual WBool SetSSHORT( SWORD s, WDataValue *val ); \
- virtual WBool GetUSHORT( UWORD & u, WDataValue *val ) const;\
- virtual WBool SetUSHORT( UWORD u, WDataValue *val );\
- virtual WBool GetSLONG( SDWORD & s, WDataValue *val ) const;\
- virtual WBool SetSLONG( SDWORD s, WDataValue *val );\
- virtual WBool GetULONG( UDWORD & u, WDataValue *val ) const;\
- virtual WBool SetULONG( UDWORD u, WDataValue *val );\
- virtual WBool GetFLOAT( SFLOAT & s, WDataValue *val ) const;\
- virtual WBool SetFLOAT( SFLOAT f, WDataValue *val );\
- virtual WBool GetDOUBLE( SDOUBLE & d, WDataValue *val ) const;\
- virtual WBool SetDOUBLE( SDOUBLE d, WDataValue *val );\
- virtual WBool GetBIT( UCHAR & c, WDataValue *val ) const;\
- virtual WBool SetBIT( UCHAR c, WDataValue *val );\
- virtual WBool GetSTINYINT( SCHAR & c, WDataValue *val ) const;\
- virtual WBool SetSTINYINT( SCHAR c, WDataValue *val );\
- virtual WBool GetUTINYINT( UCHAR & c, WDataValue *val ) const;\
- virtual WBool SetUTINYINT( UCHAR c, WDataValue *val );\
- virtual WBool GetBINARY( WBuffer & b, WDataValue *val ) const;\
- virtual WBool SetBINARY( const WBuffer & buf, WDataValue *val );\
- virtual WBool GetBOOKMARK( BOOKMARK & m, WDataValue *val ) const;\
- virtual WBool SetBOOKMARK( BOOKMARK mark, WDataValue *val ); \
- virtual WBool CopyInto( const WDataValueReference & ref ); \
- virtual WBool Clear();
-
-
- //
- // WDataValueReference -- Abstract class for reference-counted
- // values.
- //
-
- class WCMCLASS WDataValueReference : public WReferenceObject {
-
- friend class WDVFactory;
-
- private:
-
- WDataValueReference( const WDataValueReference & tr );
- WDataValueReference & operator=( const WDataValueReference & tr );
-
- protected:
-
- WDataValueReference();
-
- public:
-
- virtual ~WDataValueReference();
-
- virtual WLong Reference();
- virtual WLong Unreference();
- virtual WLong Reference( WDataValue *val );
- virtual WLong Unreference( WDataValue *val );
-
- virtual WNativeDataType GetType() const = 0;
- virtual WBool SetType( WNativeDataType type,
- WDataValue *val );
-
- virtual WNativeDataType GetPromotedType() const;
-
- virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
- WDataValue *master=NULL ) const = 0;
-
- virtual WInt GetSize() const = 0;
- virtual WBool SetSize( WInt newSize );
-
- virtual WInt GetLength() const;
- virtual WBool SetLength( WInt newLength );
-
- virtual void *GetData() const = 0;
- virtual WBool SetData( void *data, WBool copyOld=FALSE );
-
- virtual WBool Clear();
-
- virtual WBool AcquireDataResponsibility();
-
- virtual WBool DetachReferences( WDataValue *exceptFor );
-
- virtual int operator==( const WDataValueReference & other ) const;
- virtual int operator<( const WDataValueReference & other ) const;
- virtual int operator<=( const WDataValueReference & other ) const;
- virtual int operator!=( const WDataValueReference & other ) const;
- virtual int operator>( const WDataValueReference & other ) const;
- virtual int operator>=( const WDataValueReference & other ) const;
-
- WColumnDataType GetColumnType() const { return _columnType; }
- WBool SetColumnType( WColumnDataType t ) { _columnType = t; return TRUE; }
-
- virtual WBool GetDATE( DATE_STRUCT & d, WDataValue *val ) const;
- virtual WBool SetDATE( const DATE_STRUCT & d, WDataValue *val );
-
- virtual WBool GetTIME( TIME_STRUCT & t, WDataValue *val ) const;
- virtual WBool SetTIME( const TIME_STRUCT & t, WDataValue *val );
-
- virtual WBool GetTIMESTAMP( TIMESTAMP_STRUCT & t, WDataValue *val ) const;
- virtual WBool SetTIMESTAMP( const TIMESTAMP_STRUCT & t, WDataValue *val );
-
- // The following methods all have default implementations
- // that return an error. Override as appropriate.
-
- WDV_CONVERSION_METHODS
-
- protected:
-
- enum {
- WDVSLong = 0x01,
- WDVULong = 0x02,
- WDVDouble = 0x04,
- WDVChar = 0x08
- };
-
- WDataValueReference **GetRef( WDataValue *val ) const;
-
- wllist_header _refList;
-
- WColumnDataType _columnType;
- };
-
- //
- // WDVFloatRef
- //
-
- class WCMCLASS WDVFloatRef : public WDataValueReference {
-
- friend class WDVFactory;
-
- private:
-
- WDVFloatRef( const WDVFloatRef & );
- WDVFloatRef & operator=( const WDVFloatRef & );
-
- protected:
-
- WDVFloatRef();
-
- public:
-
- ~WDVFloatRef();
-
- virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
- WDataValue *master=NULL ) const;
-
- virtual WNativeDataType GetType() const;
-
- virtual WInt GetSize() const;
-
- virtual void *GetData() const;
- virtual WBool SetData( void *newData, WBool copyOld=FALSE );
-
- WDV_CONVERSION_METHODS
-
- protected:
-
- WFloat _float;
- WFloat *_pFloat;
- };
-
- //
- // WDVDoubleRef
- //
-
- class WCMCLASS WDVDoubleRef : public WDataValueReference {
-
- friend class WDVFactory;
-
- private:
-
- WDVDoubleRef( const WDVDoubleRef & );
- WDVDoubleRef & operator=( const WDVDoubleRef & );
-
- protected:
-
- WDVDoubleRef();
-
- public:
-
- ~WDVDoubleRef();
-
- virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
- WDataValue *master=NULL ) const;
-
- virtual WNativeDataType GetType() const;
-
- virtual WInt GetSize() const;
-
- virtual void *GetData() const;
- virtual WBool SetData( void *newData, WBool copyOld=FALSE );
-
- WDV_CONVERSION_METHODS
-
- protected:
-
- WDouble _double;
- WDouble *_pDouble;
- };
-
- //
- // WDVCharRef
- //
-
- class WCMCLASS WDVCharRef : public WDataValueReference {
-
- friend class WDVFactory;
-
- private:
-
- WDVCharRef( const WDVCharRef & );
- WDVCharRef & operator=( const WDVCharRef & );
-
- protected:
-
- WDVCharRef();
-
- public:
-
- ~WDVCharRef();
-
- virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
- WDataValue *master=NULL ) const;
-
- virtual WNativeDataType GetType() const;
-
- virtual WNativeDataType GetPromotedType() const;
-
- virtual WInt GetSize() const;
- virtual WBool SetSize( WInt newSize );
-
- virtual WInt GetLength() const;
- virtual WBool SetLength( WInt newLength );
-
- virtual void *GetData() const;
- virtual WBool SetData( void *newData, WBool copyOld=FALSE );
-
- virtual WBool AcquireDataResponsibility();
-
- virtual WBool GetDATE( DATE_STRUCT & d, WDataValue *val ) const;
- virtual WBool SetDATE( const DATE_STRUCT & d, WDataValue *val );
-
- virtual WBool GetTIME( TIME_STRUCT & t, WDataValue *val ) const;
- virtual WBool SetTIME( const TIME_STRUCT & t, WDataValue *val );
-
- virtual WBool GetTIMESTAMP( TIMESTAMP_STRUCT & t, WDataValue *val ) const;
- virtual WBool SetTIMESTAMP( const TIMESTAMP_STRUCT & t, WDataValue *val );
-
- WDV_CONVERSION_METHODS
-
- protected:
-
- #define WDVCharBufSize 128
-
- WAnsiChar *_pString;
- WAnsiChar *_string;
- WULong _size; // including nullchar
- WAnsiChar _defaultBuffer[ WDVCharBufSize ];
- };
-
- //
- // WDVBinaryRef
- //
-
- class WCMCLASS WDVBinaryRef : public WDataValueReference {
-
- friend class WDVFactory;
-
- private:
-
- WDVBinaryRef( const WDVBinaryRef & );
- WDVBinaryRef & operator=( const WDVBinaryRef & );
-
- protected:
-
- WDVBinaryRef();
-
- public:
-
- ~WDVBinaryRef();
-
- virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
- WDataValue *master=NULL ) const;
-
- virtual WNativeDataType GetType() const;
-
- virtual WInt GetSize() const;
- virtual WBool SetSize( WInt newSize );
-
- virtual WInt GetLength() const;
- virtual WBool SetLength( WInt newLength );
-
- virtual void *GetData() const;
- virtual WBool SetData( void *newData, WBool copyOld=FALSE );
-
- virtual WBool AcquireDataResponsibility();
-
- virtual int operator==( const WDataValueReference & other ) const;
-
- WDV_CONVERSION_METHODS
-
- protected:
-
- WByte *_pData;
- WByte *_data;
- WULong _size;
- WULong _length;
- };
-
- //
- // WDVSLongRef
- //
-
- class WCMCLASS WDVSLongRef : public WDataValueReference {
-
- friend class WDVFactory;
-
- private:
-
- WDVSLongRef( const WDVSLongRef & );
- WDVSLongRef & operator=( const WDVSLongRef & );
-
- protected:
-
- WDVSLongRef();
-
- public:
-
- ~WDVSLongRef();
-
- virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
- WDataValue *master=NULL ) const;
-
- virtual WNativeDataType GetType() const;
-
- virtual WInt GetSize() const;
-
- virtual void *GetData() const;
- virtual WBool SetData( void *newData, WBool copyOld=FALSE );
-
- WDV_CONVERSION_METHODS
-
- protected:
-
- WLong _long;
- WLong *_pLong;
- };
-
- //
- // WDVULongRef
- //
-
- class WCMCLASS WDVULongRef : public WDataValueReference {
-
- friend class WDVFactory;
-
- private:
-
- WDVULongRef( const WDVULongRef & );
- WDVULongRef & operator=( const WDVULongRef & );
-
- protected:
-
- WDVULongRef();
-
- public:
-
- ~WDVULongRef();
-
- virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
- WDataValue *master=NULL ) const;
-
- virtual WNativeDataType GetType() const;
-
- virtual WInt GetSize() const;
-
- virtual void *GetData() const;
- virtual WBool SetData( void *newData, WBool copyOld=FALSE );
-
- WDV_CONVERSION_METHODS
-
- protected:
-
- WULong _ulong;
- WULong *_pULong;
- };
-
- //
- // WDVSShortRef
- //
-
- class WCMCLASS WDVSShortRef : public WDataValueReference {
-
- friend class WDVFactory;
-
- private:
-
- WDVSShortRef( const WDVSShortRef & );
- WDVSShortRef & operator=( const WDVSShortRef & );
-
- protected:
-
- WDVSShortRef();
-
- public:
-
- ~WDVSShortRef();
-
- virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
- WDataValue *master=NULL ) const;
-
- virtual WNativeDataType GetType() const;
-
- virtual WInt GetSize() const;
-
- virtual void *GetData() const;
- virtual WBool SetData( void *newData, WBool copyOld=FALSE );
-
- WDV_CONVERSION_METHODS
-
- protected:
-
- WShort _short;
- WShort *_pShort;
- };
-
- //
- // WDVSTinyIntRef
- //
-
- class WCMCLASS WDVSTinyIntRef : public WDataValueReference {
-
- friend class WDVFactory;
-
- private:
-
- WDVSTinyIntRef( const WDVSTinyIntRef & );
- WDVSTinyIntRef & operator=( const WDVSTinyIntRef & );
-
- protected:
-
- WDVSTinyIntRef();
-
- public:
-
- ~WDVSTinyIntRef();
-
- virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
- WDataValue *master=NULL ) const;
-
- virtual WNativeDataType GetType() const;
-
- virtual WInt GetSize() const;
-
- virtual void *GetData() const;
- virtual WBool SetData( void *newData, WBool copyOld=FALSE );
-
- WDV_CONVERSION_METHODS
-
- protected:
-
- signed char _schar;
- signed char *_pSChar;
- };
-
- //
- // WDVUShortRef
- //
-
- class WCMCLASS WDVUShortRef : public WDataValueReference {
-
- friend class WDVFactory;
-
- private:
-
- WDVUShortRef( const WDVUShortRef & );
- WDVUShortRef & operator=( const WDVUShortRef & );
-
- protected:
-
- WDVUShortRef();
-
- public:
-
- ~WDVUShortRef();
-
- virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
- WDataValue *master=NULL ) const;
-
- virtual WNativeDataType GetType() const;
-
- virtual WInt GetSize() const;
-
- virtual void *GetData() const;
- virtual WBool SetData( void *newData, WBool copyOld=FALSE );
-
- WDV_CONVERSION_METHODS
-
- protected:
-
- WUShort _ushort;
- WUShort *_pUShort;
- };
-
- //
- // WDVUTinyIntRef
- //
-
- class WCMCLASS WDVUTinyIntRef : public WDataValueReference {
-
- friend class WDVFactory;
-
- private:
-
- WDVUTinyIntRef( const WDVUTinyIntRef & );
- WDVUTinyIntRef & operator=( const WDVUTinyIntRef & );
-
- protected:
-
- WDVUTinyIntRef();
-
- public:
-
- ~WDVUTinyIntRef();
-
- virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
- WDataValue *master=NULL ) const;
-
- virtual WNativeDataType GetType() const;
-
- virtual WInt GetSize() const;
-
- virtual void *GetData() const;
- virtual WBool SetData( void *newData, WBool copyOld=FALSE );
-
- WDV_CONVERSION_METHODS
-
- protected:
-
- unsigned char _uchar;
- unsigned char *_pUChar;
- };
-
- //
- // WDVBitRef
- //
-
- class WCMCLASS WDVBitRef : public WDVUTinyIntRef {
-
- friend class WDVFactory;
-
- private:
-
- WDVBitRef( const WDVBitRef & );
- WDVBitRef & operator=( const WDVBitRef & );
-
- protected:
-
- WDVBitRef();
-
- public:
-
- ~WDVBitRef();
-
- virtual WNativeDataType GetType() const;
- };
-
- //
- // WDVDateRef
- //
-
- class WCMCLASS WDVDateRef : public WDataValueReference {
-
- friend class WDVFactory;
-
- private:
-
- WDVDateRef( const WDVDateRef & );
- WDVDateRef & operator=( const WDVDateRef & );
-
- protected:
-
- WDVDateRef();
-
- public:
-
- ~WDVDateRef();
-
- virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
- WDataValue *master=NULL ) const;
-
- virtual WNativeDataType GetType() const;
-
- virtual WInt GetSize() const;
-
- virtual void *GetData() const;
- virtual WBool SetData( void *newData, WBool copyOld=FALSE );
-
- virtual WBool CopyInto( const WDataValueReference & ref );
- virtual WBool Clear();
-
- virtual WBool GetCHAR( WString & s, WDataValue *val ) const;
- virtual WBool SetCHAR( const WString & string, WDataValue *val );
-
- virtual WBool GetDATE( DATE_STRUCT & d, WDataValue *val ) const;
- virtual WBool SetDATE( const DATE_STRUCT & d, WDataValue *val );
-
- virtual WBool GetTIMESTAMP( TIMESTAMP_STRUCT & t, WDataValue *val ) const;
- virtual WBool SetTIMESTAMP( const TIMESTAMP_STRUCT & t, WDataValue *val );
-
- virtual int operator==( const WDataValueReference & other ) const;
- virtual int operator<( const WDataValueReference & other ) const;
- virtual int operator<=( const WDataValueReference & other ) const;
-
- protected:
-
- DATE_STRUCT _date;
- DATE_STRUCT *_pDate;
- };
-
- //
- // WDVTimeRef
- //
-
- class WCMCLASS WDVTimeRef : public WDataValueReference {
-
- friend class WDVFactory;
-
- private:
-
- WDVTimeRef( const WDVTimeRef & );
- WDVTimeRef & operator=( const WDVTimeRef & );
-
- protected:
-
- WDVTimeRef();
-
- public:
-
- ~WDVTimeRef();
-
- virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
- WDataValue *master=NULL ) const;
-
- virtual WNativeDataType GetType() const;
-
- virtual WInt GetSize() const;
-
- virtual void *GetData() const;
- virtual WBool SetData( void *newData, WBool copyOld=FALSE );
-
- virtual WBool CopyInto( const WDataValueReference & ref );
- virtual WBool Clear();
-
- virtual WBool GetCHAR( WString & s, WDataValue *val ) const;
- virtual WBool SetCHAR( const WString & string, WDataValue *val );
-
- virtual WBool GetTIME( TIME_STRUCT & t, WDataValue *val ) const;
- virtual WBool SetTIME( const TIME_STRUCT & t, WDataValue *val );
-
- virtual WBool GetTIMESTAMP( TIMESTAMP_STRUCT & t, WDataValue *val ) const;
- virtual WBool SetTIMESTAMP( const TIMESTAMP_STRUCT & t, WDataValue *val );
-
- virtual int operator==( const WDataValueReference & other ) const;
- virtual int operator<( const WDataValueReference & other ) const;
- virtual int operator<=( const WDataValueReference & other ) const;
-
- protected:
-
- TIME_STRUCT _time;
- TIME_STRUCT *_pTime;
- };
-
- //
- // WDVTimeStampRef
- //
-
- class WCMCLASS WDVTimeStampRef : public WDataValueReference {
-
- friend class WDVFactory;
-
- private:
-
- WDVTimeStampRef( const WDVTimeStampRef & );
- WDVTimeStampRef & operator=( const WDVTimeStampRef & );
-
- protected:
-
- WDVTimeStampRef();
-
- public:
-
- ~WDVTimeStampRef();
-
- virtual WDataValueReference *Clone( WDataValueReference *ref=NULL,
- WDataValue *master=NULL ) const;
-
- virtual WNativeDataType GetType() const;
-
- virtual WInt GetSize() const;
-
- virtual void *GetData() const;
- virtual WBool SetData( void *newData, WBool copyOld=FALSE );
-
- virtual WBool CopyInto( const WDataValueReference & ref );
- virtual WBool Clear();
-
- virtual WBool GetCHAR( WString & s, WDataValue *val ) const;
- virtual WBool SetCHAR( const WString & string, WDataValue *val );
-
- virtual WBool GetDATE( DATE_STRUCT & d, WDataValue *val ) const;
- virtual WBool SetDATE( const DATE_STRUCT & d, WDataValue *val );
-
- virtual WBool GetTIME( TIME_STRUCT & t, WDataValue *val ) const;
- virtual WBool SetTIME( const TIME_STRUCT & t, WDataValue *val );
-
- virtual WBool GetTIMESTAMP( TIMESTAMP_STRUCT & t, WDataValue *val ) const;
- virtual WBool SetTIMESTAMP( const TIMESTAMP_STRUCT & t, WDataValue *val );
-
- virtual int operator==( const WDataValueReference & other ) const;
- virtual int operator<( const WDataValueReference & other ) const;
- virtual int operator<=( const WDataValueReference & other ) const;
-
- protected:
-
- TIMESTAMP_STRUCT _timeStamp;
- TIMESTAMP_STRUCT *_pTimeStamp;
- };
-
- extern template WVector<WDataValueReference>;
-
- //
- // WDVFactory
- //
-
- class WCMCLASS WDVFactory : public WObject {
-
- protected:
- WDVFactory();
-
- ~WDVFactory();
-
- void Init();
-
- public:
- static WDVFactory *GetFactoryObject();
-
- static WDataValueReference *Allocate( WNativeDataType type,
- WDataValueReference *ref=NULL,
- WDataValue *master=NULL );
- static WDataValueReference *Allocate( const WChar *name,
- WDataValueReference *ref=NULL,
- WDataValue *master=NULL );
-
- static WBool AddPrototype( WDataValueReference *prototype );
-
- static WVector<WDataValueReference> *GetPrototypeList();
-
- protected:
- WVector<WDataValueReference> _prototypes;
- WBool _init;
-
- private:
- static WDVFactory *_theObject;
- };
-
- #endif
-